#ifndef _BIB_SOCKET_H
#define _BIB_SOCKET_H

#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <stdint.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/un.h>

#include "bib_Log.h"

#define SERVER_PATH /*"../comunicacion"*/"/home/utn_so/Desarrollo/EclipseDeMierdaPuto/comunicacion"
#define TAM_COLA_ESPERA 5

typedef struct HEADER_NIPC{
	uint8_t		type;
	uint16_t	payloadLength;
} HEADER_NIPC;

#define RESPUESTA_FAIL	0
#define RESPUESTA_OK	1

#define TIPO_HANDSHAKE	0

int abrirSocket (int *miSock);	/*socket*/
int cerrarSocket(int *miSock);	/*close*/
int enlazarPuerto(int *miSock, int miPuerto); /*bind*/
int escuchar(int *miSock); /*listen*/
int aceptarConexion(int *miSock, int *sockEntrante, struct sockaddr *addrEntrante);	/*accept*/
int conectar(int *miSock, int puertoServidor, char *IPServidor);	/*connect*/
int sendall(int sock, char *buf, int *len);	/*send*/
int reciveall(int sock, char *buf, int *len);	/*recv*/
int verificarDescriptores(int maximo, fd_set *socketsLectura); /*select*/

int abrirSocketServidor(int *miSock, int miPuerto); /*socket + bind + listen*/
int abrirSocketCliente(int *miSock, int puertoServidor, char *IPServidor); /*socket + connect*/

int enviarMensajeNIPC(int sock, struct HEADER_NIPC *header, char *payload);
int recibirMensajeNIPC(int sock, struct HEADER_NIPC *header, char *payload);
int recibirMensajeNIPCDinamico(int sock, struct HEADER_NIPC *header, char **payload);

int abrirSocketUnix(int *miSock);
int conectarSocketUnix(int *miSock);

#endif	/*_BIB_SOCKET_H*/
